// Common code for the organisational part of the system

task_roles("Abrir_Porta_Casa", [especialista_em_entradas_externas]).
task_roles("Abrir_Porta_Quarto01", [especialista_em_entradas_internas]).
task_roles("Abrir_Porta_Quarto02", [especialista_em_entradas_internas]).

task_roles("Verificar_Entrada", [especialista_em_verificacao_ambientes_internos]).
task_roles("Verificar_Quarto01", [especialista_em_verificacao_ambientes_internos]).
task_roles("Verificar_Quarto02", [especialista_em_verificacao_ambientes_internos]).

task_roles("Verificar_Bomba_Entrada", [especialista_em_encontrar_bombas_ambientes_internos]).
task_roles("Verificar_Bomba_Quarto01", [especialista_em_encontrar_bombas_ambientes_internos]).
task_roles("Verificar_Bomba_Quarto02", [especialista_em_encontrar_bombas_ambientes_internos]).

task_roles("Desarmar_Bomba", [especialista_em_bombas]).

+!tarefa_delegada(Task,GroupName): task_roles(Task,Roles)
   <- !in_ora4mas;
      lookupArtifact(GroupName, GroupId);
      for ( .member( Role, Roles) ) {
         adoptRole(Role)[artifact_id(GroupId)];
         focus(GroupId)
      }. 
    
-!contract(Service,GroupName)[error(E),error_msg(Msg),code(Cmd),code_src(Src),code_line(Line)]
   <- .print("Failed to sign the contract for ",Service,"/",GroupName,": ",Msg," (",E,"). command: ",Cmd, " on ",Src,":", Line).


+!in_ora4mas : in_ora4mas.
+!in_ora4mas : .intend(in_ora4mas)
   <- .wait({+in_ora4mas},100,_); 
      !in_ora4mas.
@lin[atomic]    
+!in_ora4mas
   <- joinWorkspace("ora4mas",_);
	  +in_ora4mas.
